/**
 * zmn自定义公共方法
 * @author heguanghua
 * @since 2018/10/18 10:24
 */
var zmnUtil = {
    // 网页高度
    docHeight: function () {
        return $(document).height();
    },

    // 窗口宽度
    winWidth: function () {
        return document.documentElement.clientWidth;
    },

    // 窗口高度
    winHeight: function () {
        return document.documentElement.clientHeight;
    },

    // 是否数字，decimal允许小数
    isNumber: function (value, allDecimal) {
        allDecimal = zmnUtil.isNull(allDecimal) ? false : allDecimal;
        var reg = allDecimal ? /^[0-9]+.?[0-9]*$/ : /^[0-9]+$/;
        return reg.test(value);
    },

    // 是否为空
    isNull: function (value) {
        return (typeof value == "undefined" || value == null) ? true : false;
    },

    // 是否不为空
    isNotNull: function (value) {
        return (typeof value == "undefined" || value == null) ? false : true;
    },

    // 是否是否为空或空字符串
    isEmptyNull: function (str) {
        return (typeof str == "undefined" || str == null || str == "") ? true : false;
    },

    // 手机号格式校验
    isMobile: function (mobile) {
        if (!(/^1[3|4|5|7|8][0-9]\d{8}$/.test(mobile.trim()))) {
            return false;
        } else {
            return true;
        }
    },
    isJSON: function (str) {
        function IsJsonString(str) {
            try {
                JSON.parse(str);
            } catch (e) {
                return false;
            }
            return true;
        }
    },
    createTime: function (v) {
        if (v == null || v == '') {
            return "";
        }
        var date = new Date(v);
        var y = date.getFullYear();
        var m = date.getMonth() + 1;
        m = m < 10 ? '0' + m : m;
        var d = date.getDate();
        d = d < 10 ? ("0" + d) : d;
        var h = date.getHours();
        h = h < 10 ? ("0" + h) : h;
        var M = date.getMinutes();
        M = M < 10 ? ("0" + M) : M;
        var S = date.getSeconds();
        S = S < 10 ? ("0" + S) : S;
        var str = y + "-" + m + "-" + d + " " + h + ":" + M + ":" + S;
        return str;
    },
    createDate: function (v) {
        if (v == null || v == '') {
            return "";
        }
        var date = new Date(v);
        var y = date.getFullYear();
        var m = date.getMonth() + 1;
        m = m < 10 ? '0' + m : m;
        var d = date.getDate();
        d = d < 10 ? ("0" + d) : d;
        var str = y + "-" + m + "-" + d;
        return str;
    },

    createDateTime: function (v) {
        if (v == null || v == '') {
            return "";
        }
        var date = new Date(v);
        var y = date.getFullYear();
        var m = date.getMonth() + 1;
        m = m < 10 ? '0' + m : m;
        var d = date.getDate();
        d = d < 10 ? ("0" + d) : d;
        var h = date.getHours();
        h = h < 10 ? ("0" + h) : h;
        var str = y + "-" + m + "-" + d + " " + h;
        return str;
    },
    alert: function (v) {
        layer.open({
            title: '提示信息'
            , content: v
        });
    },
    /**
     * 调用列子:  zmnUtil.download("/product/serviceitem/outputServiceItemExcel.action?"+$("#service_item_form_list").serialize(),"产品服务项.xlsx",function () {
                   // 回调执行
                });
     *
     *
     * 支持回调的下载文件简易封装（使用了html5特性，不支持古董浏览器）
     * @param url  地址
     * @param fileName 文件名
     * @param done 下载完成的回调
     * @author hankangshuai
     * @since 2019-7-17
     */
    download(url, fileName = new Date().toISOString(), done = () => {
    }) {
        fetch(url, {
            credentials: 'include'
        }).then(res => res.blob().then(blob => {
            let a = document.createElement('a');
            let url = window.URL.createObjectURL(blob);
            let filename = fileName;
            a.href = url;
            a.download = filename;
            a.click();
            window.URL.revokeObjectURL(url);
            done(blob);
        }))
    },
    /**
     * 调用列子:  zmnUtil.download("/product/serviceitem/outputServiceItemExcel.action?"+$("#service_item_form_list").serialize(),"产品服务项.xlsx",function () {
                   // 回调执行
                });
     *
     *
     * 支持回调的下载文件简易封装（使用了html5特性，不支持古董浏览器）
     * @param url  地址
     * @param fileName 文件名
     * @param done 下载完成的回调
     * @author hankangshuai
     * @since 2019-7-17
     */
    downloadLimitByConfig(url, fileName = new Date().toISOString(), done = () => {
    }) {
            fetch(url, {
                credentials: 'include'
            }).then(res => {
                if(!res.ok && res.status && res.status==555){
                    layer.msg('您没有配置导出数量，无法导出', {"icon": 2},()=>done());
                }else{
                    res.blob().then(blob => {
                        let a = document.createElement('a');
                        let url = window.URL.createObjectURL(blob);
                        let filename = fileName;
                        a.href = url;
                        a.download = filename;
                        a.click();
                        window.URL.revokeObjectURL(url);
                        done(blob);
                    });
                }
            })
    },
    /**
     * layui表格工具栏右侧增加按钮（在表格的done方法中使用,否则表格reload会失效）
     * @param layout  数组  示例：[{title: '导出', layEvent: 'CUSTOM_EXPORT', icon: 'layui-icon-export', display: true}...]  display属性默认true,传false隐藏
     * @author hankangshuai
     */
    toobarRightAddButton(layout) {
        let iconElem = [];
        layout.filter((i, v) => i.display || i.display === undefined).forEach((item, index, array) => {
            iconElem.push('<div class="layui-inline" title="' + item.title + '" lay-event="' + item.layEvent + '">'
                + '<i class="layui-icon ' + item.icon + '"></i>'
                + '</div>');
        });
        //  替换容器内容
        document.querySelector('.layui-table-tool-self').innerHTML = iconElem.join('');
    },

};

/**
 * zmn自定义页面公共方法
 * @author heguanghua
 * @since 2018/10/18 20:20
 */
var zmnPage = {

    /**
     * 刷新页面
     * @param timeout 回调函数或重载页面操作延迟时间，单位：毫秒，0表示不重载页面
     * @param callBack 回调函数
     */
    reload: function (message, timeout, callBack) {
        if (!zmnUtil.isNumber(timeout)) {
            timeout = 0;
        }
        layer.msg(message);
        setTimeout(function () {
            if (zmnUtil.isNotNull(callBack)) {
                callBack();
            } else if (timeout > 0) {
                location.reload(true);
            }

        }, timeout);
    },

    /**
     * 跳转页面
     * @param url 目标url
     * @param timeout 延迟时间，单位：毫秒
     */
    direct: function (url, timeout) {
        if (!zmnUtil.isNumber(timeout)) {
            timeout = 0;
        }
        setTimeout(function () {
            if (typeof url == "undefined") {
                url = location.href;
            }
            window.location = url;
        }, timeout);
    },

    /**
     * 回退页面
     * @param isRefresh
     */
    back: function (isRefresh) {
        if (isRefresh) {
            var url = document.referrer;
            zmnUtil.direct(url);
        } else {
            history.back();
        }
    },

    /**
     * 多级下拉框联动
     * @param form layui.form
     * @param url 请求下级数据的url，返回数据格式 [[value,text], [value,text], [value,text], …]
     * @param selectOneId 第1级select的ID，不含#号
     * @param selectTwoId 第2级select的ID，不含#号
     * @param selectThrId 第3级select的ID，不含#号，如无第3级则两级联动
     */
    laySelectLinkage: function (form, url, selectOneId, selectTwoId, selectThrId) {
        var $ = layui.$;
        form.on("select(" + selectOneId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return;
            }
            $.ajax({
                type: "GET", url: url,
                dataType: "json", data: {parentId: obj.value},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectTwoId).html(optionHtml);
                    form.render("select");
                }
            });
        });

        if (zmnUtil.isEmptyNull(selectThrId)) {
            return;
        }
        ;

        form.on("select(" + selectTwoId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return layer.alert("请选择！");
            }
            $.ajax({
                type: "GET", url: url,
                dataType: "json", data: {parentId: obj.value},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectThrId).html(optionHtml);
                    form.render("select");
                }
            });
        });
    },
    /**
     * 三级查询
     * @param form
     * @param urls 每个ID对应的查询URL：{selectTwoId:"url1", selectThrId:"url2"}
     * @param selectOneId
     * @param selectTwoId
     * @param selectThrId
     */
    laySelectLinkage2: function (form, urls, selectOneId, selectTwoId, selectThrId) {
        var $ = layui.$;
        form.on("select(" + selectOneId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return layer.alert("请选择！");
            }
            $.ajax({
                type: "GET", url: urls[selectTwoId],
                dataType: "json", data: {parentId: obj.value},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    $("#" + selectThrId).html(optionHtml);
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectTwoId).html(optionHtml);
                    form.render("select");
                }
            });
        });

        if (zmnUtil.isEmptyNull(selectThrId)) {
            return;
        }
        ;

        form.on("select(" + selectTwoId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return layer.alert("请选择！");
            }
            $.ajax({
                type: "GET", url: urls[selectThrId],
                dataType: "json", data: {parentId: obj.value},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    console.log(optionHtml)
                    $("#" + selectThrId).html(optionHtml);

                    form.render("select");
                }
            });
        });
    },

    /**
     * 多级下拉框联动
     * @param form layui.form
     * @param url1 selectOneId请求下级数据的url，返回数据格式 [[value,text], [value,text], [value,text], …]
     * @param url1 selectTwoId请求下级数据的url，返回数据格式 [[value,text], [value,text], [value,text], …]
     * @param selectOneId 第1级select的ID，不含#号
     * @param selectTwoId 第2级select的ID，不含#号
     * @param selectThrId 第3级select的ID，不含#号，如无第3级则两级联动
     */
    laySelectSpecial: function (form, url1, url2, selectOneId, selectTwoId, selectThrId) {
        var $ = layui.$;
        var servCategId;
        form.on("select(" + selectOneId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return layer.alert("请选择！");
            }
            servCategId = obj.value;
            $.ajax({
                type: "GET", url: url1,
                dataType: "json", data: {parentId: servCategId},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectTwoId).html(optionHtml);
                    form.render("select");
                }
            });
        });
        if (zmnUtil.isEmptyNull(selectThrId)) {
            return;
        }
        ;

        form.on("select(" + selectTwoId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return layer.alert("请选择！");
            }
            $.ajax({
                type: "GET", url: url2,
                dataType: "json", data: {categOneId: obj.value, servCategId: servCategId},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectThrId).html(optionHtml);
                    form.render("select");
                }
            });
        });
    },


    /**
     * 多级下拉框联动，最多支持五级
     * @param form layui.form
     * @param url1 selectOneId请求下级数据的url，返回数据格式 [[value,text], [value,text], [value,text], …]
     * @param url1 selectTwoId请求下级数据的url，返回数据格式 [[value,text], [value,text], [value,text], …]
     * @param selectOneId 第1级select的ID，不含#号
     * @param selectTwoId 第2级select的ID，不含#号
     * @param selectThrId 第3级select的ID，不含#号
     * @param selectFourId 第4级select的ID，不含#号
     * @param selectFiveId 第5级select的ID，不含#号，
     */
    laySelectLinkage5: function (form, url1, url2, url3, url4, selectOneId, selectTwoId, selectThrId, selectFourId, selectFiveId) {
        let $ = layui.$;
        let servCategId;
        let categOneId;
        form.on("select(" + selectOneId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return;
            }
            servCategId = obj.value;
            $.ajax({
                type: "GET", url: url1,
                dataType: "json", data: {parentId: servCategId},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectTwoId).html(optionHtml);
                    form.render("select");
                }
            });
        });
        if (zmnUtil.isEmptyNull(selectThrId)) {
            return;
        }
        ;

        form.on("select(" + selectTwoId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return;
            }
            categOneId = obj.value;
            $.ajax({
                type: "GET", url: url2,
                dataType: "json", data: {categOneId: obj.value, servCategId: servCategId},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectThrId).html(optionHtml);
                    form.render("select");
                }
            });
        });

        if (zmnUtil.isEmptyNull(selectFourId)) {
            return;
        }

        form.on("select(" + selectThrId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return;
            }
            $.ajax({
                type: "GET", url: url3,
                dataType: "json", data: {categId: obj.value, categOneId: categOneId, servCategId: servCategId},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectFourId).html(optionHtml);
                    form.render("select");
                }
            });
        });

        if (zmnUtil.isEmptyNull(selectFiveId)) {
            return;
        }

        form.on("select(" + selectFourId + ")", function (obj) {
            if (zmnUtil.isNull(obj) || obj.value == 0) {
                return;
            }
            $.ajax({
                type: "GET", url: url4,
                dataType: "json", data: {productId: obj.value},
                success: function (items) {
                    var optionHtml = '<option value="">选择</option>';
                    for (var i = 0; i < items.length; i++) {
                        optionHtml += '<option value="' + items[i][0] + '">' + items[i][1] + '</option>';
                    }
                    $("#" + selectFiveId).html(optionHtml);
                    form.render("select");
                }
            });
        });
    },

    /**
     * 获取选中的id集合（lay-table中复选框选择）
     * @param dataArray 所有tables列
     * @param id 主键ID
     * @returns {any[]}
     */
    layIdsChecked: function (dataArray, id) {
        var ids = new Array();
        for (var k = 0; k < dataArray.length; k++) {
            var o = dataArray[k];
            var isChecked = o["LAY_CHECKED"];

            if (isChecked) {
                ids.push(o[id]);
            }
        }
        return ids;
    },
    /**
     * 获取table选中的id集合（lay-table中复选框选择）
     * @param obj toolbar触发的事件对象
     * @param id 主键ID
     * @returns {any[]}
     */
    layTabldIds: function (obj, id) {
        var ids = new Array();
        var data = obj.config.data;
        for (var i = 0; i < data.length; i++) {
            var o = data[i];
            if (o['LAY_CHECKED']) {
                ids.push(o[id])
            }
        }
        // console.log(ids);
        return ids;
    },

    /**
     * 启用/停用（lay-table批量操作）
     * @param url
     * @param ids 数据集合，格式 11,12,32
     */
    layStartStopBatch: function (obj, url, ids) {
        switch (obj.event) {
            case 'stop':
                layer.confirm('确认停用吗？', function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 1}, 1000);
                });
                break;
            case 'start':
                zmnPage.ajaxSimple(url, {ids: ids, status: 2}, 1000);
                break;
            case 'lock':
                layer.confirm('确认锁定吗？', function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 3}, 1000);
                });
                break;
        }
    },

    /**
     * 启用/停用（lay-table批量操作）
     * @param url
     * @param ids 数据集合，格式 11,12,32
     */
    layStartStop: function (obj, url, ids) {
        switch (obj.event) {
            case 'stop':
                layer.confirm('确定停用吗？', function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 1}, 1000);
                });
                break;
            case 'start':
                zmnPage.ajaxSimple(url, {ids: ids, status: 2}, 1000);
                break;
            case 'lock':
                layer.confirm('确定锁定吗？', function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 3}, 1000);
                });
                break;
            case 'del':
                layer.confirm('确定删除吗？', function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 3}, 1000);
                });
                break;
        }
    },

    /**
     * 启用/停用（lay-table批量操作），点击取消按钮刷新parent页面
     * @param url
     * @param ids 数据集合，格式 11,12,32
     */
    layStartStop2: function (obj, url, ids) {
        switch (obj.event) {
            case 'stop':
                layer.confirm('确定停用吗？', function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 1}, 1000);
                }, function () {
                    location.reload();
                });
                break;
            case 'start':
                zmnPage.ajaxSimple(url, {ids: ids, status: 2}, 1000);
                break;
        }
    },

    /**
     * 启用/停用（lay-table批量操作），停用提示语参数自定义
     * @param url
     * @param ids 数据集合，格式 11,12,32
     */
    layStartStop3: function (obj, url, ids, message) {
        switch (obj.event) {
            case 'stop':
                layer.confirm(message, function () {
                    zmnPage.ajaxSimple(url, {ids: ids, status: 1}, 1000);
                });
                break;
            case 'start':
                zmnPage.ajaxSimple(url, {ids: ids, status: 2}, 1000);
                break;
        }
    },

    /**
     * 排序（lay-table单个操作）
     * @param url
     * @param ids 数据集合，格式 11,12,32
     */
    laySort: function (obj, url, id) {
        var sortValue = obj.value;  // 修改后的值
        if (!zmnUtil.isNumber(sortValue)) {
            return layer.alert("排序值必须是数字！");
        }
        zmnPage.ajaxSimple(url, {id: id, sort: sortValue}, 0);
    },

    /**
     * 修改排序（lay-table单个操作）：新增最大值限定，正整数限定，是否刷新限定
     * @param sortValue 修改的值
     * @param url 请求的url
     * @param id 主键id
     * @param max 最大值
     * @param verifyCall 其他限制的扩展函数,返回提示信息，合格返回空
     * @param timeout timeout 重载页面延迟时间，单位：毫秒，0表示不重载页面
     * @author tanbiao 20191101
     */
    laySortPositiveInteger: function (sortValue, url, id,max,timeout,verifyCall) {
        if (!/^[1-9]\d*$/.test(sortValue)) {
            return layer.alert("排序值只能是正整数");
        }
        if(max>0){
            if(Number(sortValue)>max){
                return layer.alert("排序最大"+max);
            }
        }
        if(typeof verifyCall === 'function'){
            let result = verifyCall();
            if(!zmnUtil.isEmptyNull(result)){
                return layer.alert(result);
            }
        }
        if (zmnUtil.isNull(timeout)) {
            timeout = 0;
        }
        zmnPage.ajaxSimple(url, {id: id, sort: sortValue}, timeout);
    },
    /**
     * 修改首字母（lay-table单个操作）
     * @param firstLetter 修改的值
     * @param url 请求的url
     * @param id 主键id
     * @param type 1大写限定，2小写限定，3大小写不限定）,默认大写限定
     * @param verifyCall 其他限制的扩展函数,返回提示信息，合格返回空
     * @param timeout timeout 重载页面延迟时间，单位：毫秒，0表示不重载页面
     * @author tanbiao 20191101
     */
    layFirstLetter:function(firstLetter,url, id,type,timeout,verifyCall){
        let letterWrongMessage = "请输入大写的英文字母";
        let regex = /[A-Z]/;
        if(type==2){
            regex = /[a-z]/;
            letterWrongMessage = "请输入小写的英文字母";
        }else if(type==3){
            regex = /[A-Za-z]/;
            letterWrongMessage = "请输入英文字母";
        }
        let flag = regex.test(firstLetter);
        if (!flag){
            return layer.alert(letterWrongMessage);
        }
        if (firstLetter.length > 1){
            return layer.alert("首字母字段长度不能超过1位");
        }
        if(typeof verifyCall === 'function'){
            let result = verifyCall();
            if(!zmnUtil.isEmptyNull(result)){
                return layer.alert(result);
            }
        }
        if (zmnUtil.isNull(timeout)) {
            timeout = 0;
        }
        zmnPage.ajaxSimple(url, {id: id, firstLetter: firstLetter.toUpperCase()}, timeout);
    },

    /**
     * 修改首字母（lay-table单个操作）
     * @param firstLetter 修改的值
     * @param url 请求的url
     * @param id 主键id
     * @param type 1大写限定，2小写限定，3大小写不限定）,默认大写限定
     * @param verifyCall 其他限制的扩展函数,返回提示信息，合格返回空
     * @param timeout timeout 重载页面延迟时间，单位：毫秒，0表示不重载页面
     * @author tanbiao 20191101
     */
    laySimpleSpell:function(letter,url, id,type,timeout,verifyCall){
        let letterWrongMessage = "请输入大写的英文字母";
        let regex = /[A-Z]/;
        if(type==2){
            regex = /[a-z]/;
            letterWrongMessage = "请输入小写的英文字母";
        }else if(type==3){
            regex = /[A-Za-z]/;
            letterWrongMessage = "请输入英文字母";
        }
        let flag = regex.test(letter);
        if (!flag){
            return layer.alert(letterWrongMessage);
        }
        if (letter.length > 10){
            return layer.alert("简称字段长度不能超过10位");
        }
        if(typeof verifyCall === 'function'){
            let result = verifyCall();
            if(!zmnUtil.isEmptyNull(result)){
                return layer.alert(result);
            }
        }
        if (zmnUtil.isNull(timeout)) {
            timeout = 0;
        }
        zmnPage.ajaxSimple(url, {id: id, simpleSpell: letter.toUpperCase()}, timeout);
    },

    /**
     * 修改简拼（lay-table单个操作）
     * @param simpleSpell 修改的值(简拼)
     * @param url 请求的url
     * @param id 主键id
     * @param type 1大写限定，2小写限定，3大小写不限定）,默认大写限定
     * @param verifyCall 其他限制的扩展函数,返回提示信息，合格返回空
     * @param timeout timeout 重载页面延迟时间，单位：毫秒，0表示不重载页面
     * @author linfeng 20210108
     */
    laySimpleSpell:function(simpleSpell,url, id,type,timeout,verifyCall){
        let letterWrongMessage = "请输入大写的简拼";
        let regex = /[A-Z]/;
        if(type==2){
            regex = /[a-z]/;
            letterWrongMessage = "请输入小写的简拼";
        }else if(type==3){
            regex = /[A-Za-z]/;
            letterWrongMessage = "请输入简拼";
        }
        let flag = regex.test(simpleSpell);
        if (!flag){
            return layer.alert(letterWrongMessage);
        }
        if (simpleSpell.length > 10){
            return layer.alert("简拼长度不能超过10位");
        }
        if(typeof verifyCall === 'function'){
            let result = verifyCall();
            if(!zmnUtil.isEmptyNull(result)){
                return layer.alert(result);
            }
        }
        if (zmnUtil.isNull(timeout)) {
            timeout = 0;
        }
        zmnPage.ajaxSimple(url, {id: id, simpleSpell: simpleSpell.toUpperCase()}, timeout);
    },

    /**
     * 简单的ajax通用处理方法
     * @param url
     * @param data json数据
     * @param timeout 重载页面延迟时间，单位：毫秒，0表示不重载页面
     */
    ajaxSimple: function (url, data, timeout) {
        if (zmnUtil.isNull(timeout)) {
            timeout = 0;
        }
        var $ = layui.$;
        $.ajax({
            type: "POST", url: url,
            dataType: "json", data: data,
            success: function (json) {
                if (json.status == 200) {
                    zmnPage.reload(json.message, timeout);
                } else {
                    layer.msg(json.message);
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
            }
        });
    },

    ajaxJson: function (url, data) {
        let index;
        var $ = layui.$;
        $.ajax({
            type: "POST",
            url: url,
            data: data,
            beforeSend: function () {
                index = layer.load(1, {
                    shade: [0.5, '#DBDBDB'],
                    content: '请稍等...',
                    success: function (layero) {
                        layero.find('.layui-layer-content').css({
                            'padding-top': '40px',
                            'width': '200px'
                        });
                    }
                });
            },
            success: function (result) {
                if (result.status==200) {
                    layer.msg(result.message, {"icon": 1});
                } else {
                    layer.msg(result.message, {"icon": 2});
                }
                layer.close(index);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
            }
        });
    },

    /**
     * 通用的分页参数
     * @param json
     * @param formIndex form索引，默认0
     * @returns {{elem: string, count: Array, limit: Array, curr: Array, layout: [string,string,string,string,string,string,string], jump: jump}}
     */
    laypageOptions: function (json, formIndex) {
        if (zmnUtil.isNull(formIndex)) {
            formIndex = 0;
        }
        var options = {
            elem: 'layui-table-page1',
            count: json.totalCount,
            limit: json.pageSize,
            curr: json.pageIndex,
            layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'],
            jump: function (obj, first) {
                var $ = layui.$;
                var pagerForm = document.forms[formIndex];
                if (first) {
                    $(pagerForm).append('<input type="hidden" id="pageIndex" name="pageIndex" value="' + obj.curr + '"/>')
                        .append('<input type="hidden" id="pageSize" name="pageSize" value="' + obj.limit + '"/>');
                } else {
                    $("#pageIndex").val(obj.curr);
                    $("#pageSize").val(obj.limit);
                    pagerForm.submit();
                }
            }
        }
        return options;
    },
};

/**
 * zmn自定义枚举/字典
 * @author heguanghua
 * @since 2018/10/19 14:06
 */
var zmnEnum = {
    // 通用状态
    STATUS: {0: "", 1: "停用", 2: "正常", 3: "锁定"},
    // 执行结果
    RESULT: {0: "", 1: "失败", 2: "成功"},
    //平台类型
    PLAT_TYPE: {20: "言而有信", 10: "啄木鸟", 30: "一步维修", 40: "川南环保"},
    // 设备类型
    DEVICE_TYPE: {0: "", 1: "windows", 2: "mac", 3: "linux", 11: "iOS", 12: "android"},
    // 来源类型
    FROME_TYPE: {0: "", 1: "web", 2: "wap", 3: "ios", 4: "android", 5: "weixin"},
    // 排他性
    MUTEX_TYPE: {0: "", 1: "全局互斥", 2: "局部互斥", 3: "不互斥"},
    // 公司类型
    COMPANY_TYPE: {
        130: "服务商",
        140: "电器公司",
        220: "企业客户",
        230: "厂商客户",
        300: "支付平台",
        120: "子公司",
        200: "渠道",
        310: "供应商",
        320: "税务公司",
        // 330: "配送供应商",
        100: "平台公司",
        110: "大区"
    },
    // 员工类型
    STAFF_TYPE: {2: "全职", 3: "工程师", 4: "兼职", 5: "实习", 6: "劳务派遣", 7: "退休返聘", 8: "劳务外包"},
    // 员工状态
    STAFF_STATUS: {1: "试用", 2: "正式", 3: "离职"},
    // 员工职级
    STAFF_LEVEL: {1: "专员", 2: "主管", 3: "经理", 4: "中心负责人"},
    // 价格类型
    PRICE_TYPE: {0: "", 1: "一口价", 2: "维修价"},
    // 产品类型
    PRODUCT_TYPE: {0: "", 1: "普通产品", 2: "上门费产品", 3: "加急费产品", 4: "深夜加急费产品"},
    // 后台禁用
    HIDDEN_TYPE: {0: "", 1: "否", 2: "是"},
    // 是否参与绩效考核
    PERFORMANCE_TYPE: {0: "", 1: "参与", 2: "不参与"},
    // 平台类型
    PLATFORM_TYPE: {1: "其他", 2: "线下", 3: "线上", 4: "平台"},
    // 预收款收款类型
    ADVANCE_TYPE: {0: "", 1: "啄木鸟预售", 2: "渠道预收"},
    // 结算类型
    BILL_TYPE: {0: "", 1: "不需要结算", 2: "总公司结算", 3: "子公司结算"},
    //是否真实金额
    REALFLAG_TYPE: {0: "", 1: "推送真实金额", 2: "推荐假的金额"},
    // 品牌类型
    BRAND_TYPE: {1: "国产品牌", 2: "国外品牌"},
    // 数据权限类型 功能迁移到mcc,常量已废弃
    PERMITDATA_TYPE: {
        1: "公司",
        2: "服务类型",
        3: "城市",
        //42: "一级渠道",
        4: "二级渠道",
        5: "下单平台",
        6: "服务平台",
        7: "服务商",
        8: "信息公司",
        9: "CC数据",
        10: "区/县",
        100: "总公司",
        101: "大区"
    },
    // 线上/线下
    PLAT_FORM_TYPE: {1: "其他", 2: "线下", 3: "线上"},
    // 佣金类型
    COMMISSION_TYPE: {1: "按比例返佣", 2: "按固定金额返佣"},
    // 组织架构类型
    ORGAN_TYPE: {1: "服务商", 5: "子公司", 7: "信息公司", 8: "电器公司", 9: "承包商公司", 100: "总公司", 101: "大区"},
    // 服务项价格是否受限
    MAX_UPPER_PRICE: {1: "受限", 2: "不受限"},
    // 是否状态
    YSE_OR_NO_TYPE: {0: "", 1: "否", 2: "是"},
    // 渠道押金状态
    CHANNEL_DEPOSIT_STATUS: {0: "", 1: "未收", 2: "已收", 3: "已退"},
    // 权限类型状态
    BUTTON_STATUS: {0: "", 1: "菜单", 2: "按钮"},
    // 结算类型
    SETTLEMENT_TYPE: {0: "", 1: "预充值", 2: "后结算"},
    // 保内/保外类型
    WARRANTY_TYPE: {0: "", 1: "保外", 2: "保内"},
    // 渠道分类
    CHANNEL_TYPE: {0: "", 1: "政企渠道", 2: "商家渠道", 3: "厂家渠道", 4: "自有渠道", 5: "推广渠道", 6: "服务商渠道"},
    // 结算周期
    FICO_COUNT_CYCLE: {0: "", 1: "3天结", 2: "周结"},
    // 渠道一口价支付方式
    CHANNEL_PRICE_PAY_TYPE: {0: "", 1: "必须下单时支付", 2: "必须下单后支付", 3: "两种均支持"},
    // 结算周期
    CHANNEL_PRICE_PRICE_DISCOUNT: {0: "", 1: "无", 2: "线上支付9折"},
    // 城市分类系数业务使用范围：1.基础产品 2.渠道产品
    CITY_RATIO_SERVICE_TYPE: {0: "", 1: "基础城市价", 2: "渠道城市价"}
}

